package com.jcode.skeleton.service;

import java.util.List;

import com.jcode.skeleton.dao.GenericDao;
import com.jcode.skeleton.model.Tree;

/**
 * 树形模型服务
 *
 * @Author dreajay
 * @DateTime 2017年3月26日 下午4:14:35
 * 
 * @param <T>
 */
public class TreeService<T extends Tree> extends GenericServiceImpl {

	public TreeService(String sqlNamespace) {
		super(sqlNamespace);
	}

	public TreeService(String sqlNamespace, GenericDao dao) {
		super(sqlNamespace, dao);
	}

	/**
	 * 通过父节点查找子节点列表
	 * 
	 * @param parentId
	 * @return
	 */
	public List<T> selectChildrenByParentId(Integer parentId) {
		return dao.selectList(getFullQualifiedStatement("selectChildrenByParentId"), parentId);
	}

	/**
	 * 通过父节点递归查找子节点列表
	 * 
	 * @param parentId
	 * @return
	 */
	public List<T> selectChildrenByParentIdRecursion(Integer parentId) {
		List<T> list = this.selectChildrenByParentId(parentId);
		for (T t : list) {
			List<T> children = this.selectChildrenByParentIdRecursion(t.getId());
			t.setChildren(children);
		}
		return list;
	}

	/**
	 * 查找整棵树列表
	 * 
	 * @return
	 */
	public List<T> selectTree() {
		return selectChildrenByParentIdRecursion(0);
	}
}
